/*
 * Copyright (C) 2016-2020 52°North Initiative for Geospatial Open Source
 * Software GmbH
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published
 * by the Free Software Foundation.
 *
 * If the program is linked with libraries which are licensed under one of
 * the following licenses, the combination of the program with the linked
 * library is not considered a "derivative work" of the program:
 *
 *       • Apache License, version 2.0
 *       • Apache Software License, version 1.0
 *       • GNU Lesser General Public License, version 3
 *       • Mozilla Public License, versions 1.0, 1.1 and 2.0
 *       • Common Development and Distribution License (CDDL), version 1.0
 *
 * Therefore the distribution of the program linked with libraries licensed
 * under the aforementioned licenses, is permitted by the copyright holders
 * if the distribution is compliant with both the GNU General Public
 * License version 2 and the aforementioned licenses.
 *
 * As an exception to the terms of the GPL, you may copy, modify,
 * propagate, and distribute a work formed by combining 52°North WPS
 * GeoTools Modules with the Eclipse Libraries, or a work derivative of
 * such a combination, even if such copying, modification, propagation, or
 * distribution would otherwise violate the terms of the GPL. Nothing in
 * this exception exempts you from complying with the GPL in all respects
 * for all of the code used other than the Eclipse Libraries. You may
 * include this exception and its grant of permissions when you distribute
 * 52°North WPS GeoTools Modules. Inclusion of this notice with such a
 * distribution constitutes a grant of such permissions. If you do not wish
 * to grant these permissions, remove this paragraph from your
 * distribution. "52°North WPS GeoTools Modules" means the 52°North WPS
 * modules using GeoTools functionality - software licensed under version 2
 * or any later version of the GPL, or a work based on such software and
 * licensed under the GPL. "Eclipse Libraries" means Eclipse Modeling
 * Framework Project and XML Schema Definition software distributed by the
 * Eclipse Foundation and licensed under the Eclipse Public License Version
 * 1.0 ("EPL"), or a work based on such software and licensed under the EPL.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 * Public License for more details.
 */
package org.n52.javaps.gt.io.util;

import javax.xml.namespace.QName;

public interface GMLSchemaConstants {

    String VERSION = "1.0";

    String NS_GML = "http://www.opengis.net/gml";

    String NS_GML_PREFIX = "gml";

    String NS_XS = "http://www.w3.org/2001/XMLSchema";

    String NS_XS_PREFIX = "xs";

    String NS_N52_PREFIX = "n52";

    String FEATURE_TYPE = "FeatureType";

    String _FEATURE = "_Feature";

    String ABSTRACT_FEATURE_TYPE = "AbstractFeatureType";

    static QName xs(String element) {
        return new QName(NS_XS, element, NS_XS_PREFIX);
    }

    static String xsString(String element) {
        return NS_XS_PREFIX + ":" + element;
    }

    static String gml(String element) {
        return NS_GML_PREFIX + ":" + element;
    }

    static QName n52(String element, String namespace) {
        return new QName(namespace, element, NS_N52_PREFIX);
    }

    static String n52String(String element) {
        return NS_N52_PREFIX + ":" + element;
    }

    public interface Attr {

        String AN_ELEMENT_FORM_DEFAULT = "elementFormDefault";

        String AN_TARGET_NAMESPACE = "targetNamespace";

        String AN_VERSION = "version";

        String AN_TYPE = "type";

        String AN_NAME = "name";

        String AN_BASE = "base";

        String AN_MINOCCURS = "minOccurs";

        String AN_MAXOCCURS = "maxOccurs";

        String AN_SUBSTITUTION_GROUP = "substitutionGroup";

        String AN_NAMESPACE = "namespace";

        String AN_SCHEMALOCATION = "schemaLocation";

    }

    public interface Elem {

        String EN_SCHEMA = "schema";

        QName QN_SCHEMA = xs(EN_SCHEMA);

        String EN_IMPORT = "import";

        QName QN_IMPORT = xs(EN_IMPORT);

        String EN_ELEMENT = "element";

        QName QN_ELEMENT = xs(EN_ELEMENT);

        String EN_SIMPLE_TYPE = "simpleType";

        QName QN_SIMPLE_TYPE = xs(EN_SIMPLE_TYPE);

        String EN_COMPLEX_TYPE = "complexType";

        QName QN_COMPLEX_TYPE = xs(EN_COMPLEX_TYPE);

        String EN_COMPLEX_CONTENT = "complexContent";

        QName QN_COMPLEX_CONTENT = xs(EN_COMPLEX_CONTENT);

        String EN_EXTENSION = "extension";

        QName QN_EXTENSION = xs(EN_EXTENSION);

        String EN_SEQUENCE = "sequence";

        QName QN_SEQUENCE = xs(EN_SEQUENCE);

        String EN_RESTRICTION = "restriction";

        QName QN_RESTRICTION = xs(EN_RESTRICTION);
    }
}
